The present invention relates generally to apparatus and methods for decoding one or more programs transported in a transport stream, and more specifically to apparatus and methods for digitally adjusting the timing basis of timing information in one or more programs, which are transported in a transport steam, from an encoder-clock basis to a decoder-clock basis.
An established demand exists for the delivery of programs transported in transport streams to users. These programs might include audio programs, visual programs, audio-visual programs, game programs, computer programs and the like. Audio programs might include digital radio programs; visual program might include video programs that might not include sound tracks; audio-visual programs might include movie programs, television programs; and game programs might include Internet game programs played by users over the Internet or the like. The programs might be configured for use on one or more pieces of a user's audio and/or visual electronic equipment, such as a television, a set-top box, a videocassette recorder, a personal computer, a game station and the like.
A transport stream typically is sent from a “head end” over a communication link to a piece of electronic equipment. The head end typically embeds clock references into programs, such that the clock references include timing information of one or more encoder clocks used for encoding the programs. Transport streams are often transmitted over hybrid fiber coax (HFC), a satellite link, a terrestrial broadcast link and the like. Electronic equipment configured to receive a transport stream and play one or more programs transported in the transport stream typically includes a decoder, or might be coupled to a decoder, that is configured to decode the one or more programs.
A decoder is typically configured to extract program-clock references (PCRs) and timestamps from programs that are embedded in the programs at the head end. The PCRs might include time information and/or frequency information of one or more encoder clocks used to encode the programs. The extracted PCRs might be used by the decoder to synchronize the decoder's decoder clock to an encoder clock. Timestamps include similar timing information as PCRs and are typically used by a program-decoder module along with a synchronized-decoder-clock signal to decode a program. As referred to herein, a decoder might include a program-decoder module. Clock synchronization of a decoder clock to an encoder clock makes it possible for a program to be played back on a piece of electronic equipment in a predetermined manner (e.g., at a predetermined frame rate, with little or no flicker, with voice tracks synchronized to video tracks, etc.). A number of encoding formats are used for encoding programs in a transport stream. A number of standardized encoding formats that are gaining wide acceptance for program encoding have been developed by the Moving Picture Experts Group (MPEG). Various standards developed by MPEG include MPEG-1, MPEG-2, MPEG-4, MPEG-7, and MPEG-21, the latter of which has yet to be finalized. A number of the MPEG standards specify the use of embedded PCRs that are referred to in the MPEG standards as program-clock references (PCRs). PCRs serve as clock references of an encoder clock, and more specifically, are snapshots of the output of an encoder-clock counter that is configured to accumulate an encoder-clock signal generated, and output, by an encoder clock. An encoder-clock signal is typically a periodic signal, and an accumulated-encoder-clock signal is a summation of the periodic signals.
One traditional decoder technique for synchronizing a decoder clock to an encoder clock includes extracting the PCRs from a received program, and using the PCRs to adjust the clock signal of a voltage controlled oscillator (VCO) (e.g., a decoder clock). More specifically, the VCO might be adjusted by: i) sampling the PCRs in a program, ii) calculating the differences between an accumulated-clock signal of the VCO and the PCRs, and iii) using the differences to adjust the VCO output to synchronize the clock signals of the VCO to the encoder-clock signals and an encoder clock.
FIG. 1 is a simplified block diagram of a traditional decoder 100 that might be used to decode a program for presentation on a television or the like. The decoder might include a transport engine 105, a synchronization engine 110, and a program-decoder module 115. The transport engine is configured to receive a transport stream 120 transmitted from a head end 125. The head end might include one or more encoder clocks 130 used for encoding a plurality of programs that might be transported in the transport stream. The transport engine might include a PCR detector 135 configured to extract PCRs that are embedded in a program that is received in the transport stream. The PCRs might be used by the synchronization engine to synchronize the decoder-clock signals generated by the synchronization engine's VCO 145 to the encoder-clock signals represented by the PCRs. More specifically, the synchronization engine might include an adder 145, an analog low pass filter 150, the VCO 125, and a local time counter 160 that are configured to adjust the synchronization engine's VCO.
Traditional decoders and decoder techniques have a number of shortcomings. For example, if a traditional decoder is to decode two or more programs, the traditional decoder may include a number of synchronization engines matching the number of programs that are to be decoded by the decoder. That is, a traditional decoder might be able to decode only as many programs as the number of synchronization engines that are included in the decoder. For example, to decode three programs, a traditional decoder might include three synchronization engines and/or other duplicated components. Generally, each synchronization engine is dedicated to a given program being decoded because the synchronization engine primarily includes analog devices (e.g., the VCO), and the analog devices are configured to substantially continuously monitor the given program to synchronize the VCO to encoder clock 130 disposed at head end 125. As each synchronization engine is configured to substantially continuously monitor a program assigned to the synchronization engine, the synchronization engine is not configured to monitor more than one program at any given time. Therefore, a decoder configured to decode more than one program typically includes more than one synchronization engine as well as other components. The duplication of synchronization engines in a multi-program decoder is relatively costly, and tends to drive up the cost of manufacturing these decoders, and drive up the cost to manufacture a piece of electronic equipment (e.g., television, set-top box, etc.) that may include such a decoder.
Additionally, a traditional decoder that includes a single synchronization engine typically is not able to decode more than a single program at any given time, and thus limits a user's consumption to a single program at the given time. As program users become accustomed to consuming multiple programs at a given time, electronic products with the foregoing described limitation are not likely to satisfy these users.
Other traditional decoders suffer similar high cost limitations as the traditional decoders described above. For example, decoders that use least squares linear regression models (LSLRMs) to estimate PCRs tend to be costly. Decoders configured to use a LSLRM to estimate PCRs, typically calculate a PCR estimate for each PCR for each program decoded by the decoder. To decode a relatively large number of programs, relatively large computing power should be available to the decoder. Relatively large computing power tends to be costly and tends to drive up the cost to manufacture these traditional decoders.
Therefore, a need exists for decoders that can decode one or more programs, are easy to use, and that are relatively inexpensive to manufacture.